<?php

/**
 * Project:     Framework G - G Light
 * File:        db.php
 * 
 * For questions, help, comments, discussion, etc., please join to the
 * website www.frameworkg.com
 * 
 * @link http://www.frameworkg.com/
 * @copyright 2013-02-07
 * @author Group Framework G  <info at frameworkg dot com>
 * @version 1.2
 */
class db {

    var $server = "localhost"; //DB server
    var $user = "root"; //DB user
    var $pass = ""; //DB password
    var $db = "db_harley"; //DB database name
    var $limit = C_DB_LIMIT; //DB limit of elements by page
    var $cn;
    var $numpages;

    public function db() {
        
    }

    //connect to database
    public function connect() {
        $this->cn = mysql_connect($this->server, $this->user, $this->pass);
        if (!$this->cn) {
            die("Failed connection to the database: " . mysql_error());
        }
        if (!mysql_select_db($this->db)) {
            die("Unable to communicate with the database $db: " . mysql_error());
        }
        mysql_query("SET NAMES utf8");
    }

    //function for doing multiple queries
    public function do_operation($operation, $class = NULL) {
        $result = mysql_query($operation, $this->cn);
        if (!$result) {
            $this->throw_sql_exception($class);
        }
    }

    //function for obtain data from db in object form
    private function get_data($operation) {
        $data = array();
        $result = mysql_query($operation, $this->cn) or die(mysql_error($this->cn));
        while ($row = mysql_fetch_object($result)) {
            array_push($data, $row);
        }
        return $data;
    }

    //throw exception to web document
    private function throw_sql_exception($class) {
        $errno = mysql_errno();
        $error = mysql_error();
        $msg = $error . "<br /><br /><b>Error number:</b> " . $errno;
        throw new Exception($msg);
    }

    //for avoid sql injections, this functions cleans the variables
    private function escape_string(&$data) {
        if (is_object($data)) {
            foreach ($data->metadata() as $key => $attribute) {
                if (!is_empty($data->get($key))) {
                    $data->set($key, mysql_real_escape_string($data->get($key)));
                }
            }
        } else if (is_array($data)) {
            foreach ($data as $key => $value) {
                if (!is_array($value)) {
                    $data[$key] = mysql_real_escape_string($value);
                }
            }
        }
    }

    //function for add data to db
    public function insert($options, $object) {
        switch ($options['lvl1']) {
            case "empleado":
                switch ($options['lvl2']) {
                    case "normal":
                        $hasher = new PasswordHash(8, FALSE);
                        $object->set('contrasena', $hasher->HashPassword($object->get('contrasena')));
                        unset($hasher);
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $identificacion = mysql_real_escape_string($object->get('identificacion'));
                        $tipo_id = mysql_real_escape_string($object->get('tipo_id'));
                        $telefono = mysql_real_escape_string($object->get('telefono'));
                        $cargo = mysql_real_escape_string($object->get('cargo'));

                        $contrasena = mysql_real_escape_string($object->get('contrasena'));
                        $this->do_operation("INSERT INTO empleado (nombre, identificacion, tipo_id, 
                            telefono, cargo,contrasena) VALUES ('$nombre', '$identificacion',  '$tipo_id', '$telefono', '$cargo','$contrasena');");

                        break;
                }
                break;
            case "granjero":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $sexo = mysql_real_escape_string($object->get('sexo'));
                        $edad = mysql_real_escape_string($object->get('edad'));
                        $this->do_operation("INSERT INTO granjero (nombre, id, sexo, edad) VALUES ('$nombre', $id,  '$sexo', '$edad');");

                        break;
                }
                break;
            case "paciente":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $sexo = mysql_real_escape_string($object->get('sexo'));
                        $fecha_nacimiento = mysql_real_escape_string($object->get('fecha_nacimiento'));
                        $this->do_operation("INSERT INTO paciente (nombre, id, sexo, fecha_nacimiento) VALUES ('$nombre', $id,  '$sexo', '$fecha_nacimiento');");

                        break;
                }
                break;
            case "reporte":
                switch ($options['lvl2']) {
                    case "normal":
                        //$codigo = mysql_real_escape_string($object->get('codigo'));
                        $descripcion = mysql_real_escape_string($object->get('descripcion'));
                        $estado_actual = mysql_real_escape_string($object->get('estado_actual'));
                        $estado_siguiente = mysql_real_escape_string($object->get('estado_siguiente'));
                        $fecha = mysql_real_escape_string($object->get('fecha'));
                        $empleado = mysql_real_escape_string($object->get('empleado'));
                        $codigo_guia = mysql_real_escape_string($object->get('codigo_guia'));
                        //echo entramos;
                        //var_dump($object);

                        $this->do_operation("INSERT INTO `reporte`(`codigo`, `descripcion`, 
                            `estado_actual`,`estado_siguiente`, `fecha`, `empleado`, `codigo_guia`)
                            VALUES (NULL,'$descripcion','$estado_actual','$estado_siguiente','$fecha',
                                '$empleado','$codigo_guia');");
                        break;
                }
                break;
            case "finca":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $valor_propiedad = mysql_real_escape_string($object->get('valor_propiedad'));
                        $cantidad_vacas = mysql_real_escape_string($object->get('cantidad_vacas'));
                        $cantidad_gallinas = mysql_real_escape_string($object->get('cantidad_gallinas'));
                        $granjero = mysql_real_escape_string($object->get('granjero'));

                        $granjero = mysql_real_escape_string($object->get('granjero'));
                        $this->do_operation("INSERT INTO finca (nombre, id, valor_propiedad, cantidad_vacas,cantidad_gallinas,granjero) VALUES ('$nombre', '$id', '$valor_propiedad', '$cantidad_vacas', '$cantidad_gallinas','$granjero');");

                        break;
                }
                break;
            case "finca":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $valor_propiedad = mysql_real_escape_string($object->get('valor_propiedad'));
                        $cantidad_vacas = mysql_real_escape_string($object->get('cantidad_vacas'));
                        $cantidad_gallinas = mysql_real_escape_string($object->get('cantidad_gallinas'));
                        $granjero = mysql_real_escape_string($object->get('granjero'));

                        $granjero = mysql_real_escape_string($object->get('granjero'));
                        $this->do_operation("INSERT INTO finca (nombre, id, valor_propiedad, cantidad_vacas,cantidad_gallinas,granjero) VALUES ('$nombre', '$id', '$valor_propiedad', '$cantidad_vacas', '$cantidad_gallinas','$granjero');");

                        break;
                }
                break;
            case "historia":
                switch ($options['lvl2']) {
                    case "normal":
                        $fecha_creacion = mysql_real_escape_string($object->get('fecha_creacion'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $tipo_enfermedad = mysql_real_escape_string($object->get('tipo_enfermedad'));
                        $detalle = mysql_real_escape_string($object->get('detalle'));
                        $paciente = mysql_real_escape_string($object->get('paciente'));

                        $this->do_operation("INSERT INTO historia (fecha_creacion, id, tipo_enfermedad, detalle,paciente) VALUES ('$fecha_creacion'
                            , '$id', '$tipo_enfermedad', '$detalle', '$paciente');");

                        break;
                }
                break;
            case "parametro_control":
                switch ($options['lvl2']) {
                    case "normal":
                        $codigo = mysql_real_escape_string($object->get('codigo'));
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $descripcion = mysql_real_escape_string($object->get('descripcion'));
                        $estado = mysql_real_escape_string($object->get('estado'));
                        $codigo_modelo = mysql_real_escape_string($object->get('codigo_modelo'));

                        $this->do_operation("INSERT INTO `parametro_control`(`codigo`, `nombre`, `fase_desarrollo`, `descripcion`, `estado`, `codigo_modelo`) 
                            VALUES ('$codigo','$nombre','$estado','$descripcion','$estado','$codigo_modelo');");

                        break;
                }
                break;
            case "orden_produccion":
                switch ($options['lvl2']) {
                    case "normal":
                        $codigo = mysql_real_escape_string($object->get('codigo'));
                        $fecha = mysql_real_escape_string($object->get('fecha'));


                        $this->do_operation("INSERT INTO orden_produccion(codigo, fecha) 
                            VALUES ('$codigo','$fecha');");

                        break;
                }
                break;
            case "detalle":
                switch ($options['lvl2']) {
                    case "normal":
                        $cantidad = mysql_real_escape_string($object->get('cantidad'));
                        $modelo = mysql_real_escape_string($object->get('modelo'));
                        $orden_produccion = mysql_real_escape_string($object->get('orden_produccion'));


                        $this->do_operation("INSERT INTO detalle(cantidad, modelo,orden_produccion) 
                            VALUES ('$cantidad','$modelo','$orden_produccion');");

                        break;
                }
                break;
            case "modelo":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $codigo = mysql_real_escape_string($object->get('codigo'));
                        $descripcion = mysql_real_escape_string($object->get('descripcion'));
                        $responsable = mysql_real_escape_string($object->get('responsable'));
                        $this->do_operation("INSERT INTO `modelo`(`codigo`, `nombre`, `descripcion`, `responsable`) 
                            VALUES ('$codigo','$nombre','$descripcion',$responsable);");
                        break;
                }
                break;
            case "moto":
                switch ($options['lvl2']) {
                    case "normal":
                        $codigo_guia = mysql_real_escape_string($object->get('codigo_guia'));
                        //$codigo = mysql_real_escape_string($object->get('codigo'));
                        $codigo_modelo = mysql_real_escape_string($object->get('codigo_modelo'));

                        $this->do_operation("INSERT INTO `moto`(`codigo`, `codigo_modelo`, `codigo_guia`) 
                            VALUES (NULL,'$codigo_modelo','$codigo_guia');");
                        break;
                }
                break;
            case "guia":
                switch ($options['lvl2']) {
                    case "normal":
                        //$codigo_guia = mysql_real_escape_string($object->get('codigo_guia'));
                        //$codigo = mysql_real_escape_string($object->get('codigo'));
                        //$codigo_modelo = mysql_real_escape_string($object->get('codigo_modelo'));

                        $this->do_operation("INSERT INTO `guia`(`codigo`) 
                            VALUES (NULL);");
                        break;
                }
                break;
            default: break;
        }
    }

    //function for edit data from db
    public function update($options, $object) {
        switch ($options['lvl1']) {
            case "empleado":
                switch ($options['lvl2']) {
                    case "normal":
                        //
                        break;
                }
                break;


            case "finca":
                switch ($options['lvl2']) {
                    case "normal":
                        $nombre = mysql_real_escape_string($object->get('nombre'));
                        $id = mysql_real_escape_string($object->get('id'));
                        $cantidad_vacas = mysql_real_escape_string($object->get('cantidad_vacas'));
                        $granjero = mysql_real_escape_string($object->get('granjero'));
                        $cantidad_gallinas = mysql_real_escape_string($object->get('cantidad_gallinas'));
                        $valor_propiedad = mysql_real_escape_string($object->get('valor_propiedad'));
                        $old_id = mysql_real_escape_string($object->auxiliars['old_id']);
                        $this->do_operation("UPDATE finca SET nombre='$nombre', id='$id', cantidad_vacas='$cantidad_vacas', granjero='$granjero',cantidad_gallinas='
						$cantidad_gallinas' valor_propiedad='$valor_propiedad', $cantidad_gallinas'WHERE id='$old_id';");

                        break;
                }
                break;

            default: break;
        }
    }

    //function for delete data from db
    public function delete($options, $object) {
        switch ($options['lvl1']) {
            case "empleado":
                break;
            case "finca":
                switch ($options['lvl2']) {
                    case "normal":
                        //
                        $id = mysql_real_escape_string($object->get('id'));
                        $this->do_operation("DELETE FROM finca where id='$id';");

                        break;
                    default : break;
                }


            default: break;
        }
    }

    //function that returns an array with data from a operation
    public function select($option, $data) {
        $info = array();
        switch ($option['lvl1']) {
            case "user":
                switch ($option['lvl2']) {
                    case "one_login":
                        $user = mysql_real_escape_string($data['user']);
                        $password = mysql_real_escape_string($data['password']);
                        $result = $this->get_data("SELECT password, id FROM user WHERE user = '$user';");
                        $id = $result[0]->id;
                        $hasher = new PasswordHash(8, FALSE);
                        if ($hasher->CheckPassword($password, $result[0]->password)) {
                            $info = $this->get_data("SELECT name, user, type, id FROM user WHERE id = '$id';");
                        }
                        unset($hasher);
                        break;
                }
                break;

            case "empleado":
                switch ($option['lvl2']) {
                    case "one_login":
                        $identificacion = mysql_real_escape_string($data['identificacion']);
                        $contrasena = mysql_real_escape_string($data['contrasena']);
                        $result = $this->get_data("SELECT contrasena, identificacion FROM empleado WHERE identificacion = '$identificacion';");
                        $id = $result[0]->identificacion;
                        $hasher = new PasswordHash(8, FALSE);
                        if ($hasher->CheckPassword($contrasena, $result[0]->contrasena)) {
                            $info = $this->get_data("SELECT nombre, identificacion, cargo FROM empleado WHERE identificacion = '$id';");
                        }
                        unset($hasher);
                        break;
                }
                break;
            case "fase":
                switch ($option['lvl2']) {
                    case "uno" :
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM fase WHERE id = '$id';");
                        break;
                    case "all" :
                        $info = $this->get_data("SELECT * FROM fase;");
                        break;
                }
                break;

            case "granjero":
                switch ($option['lvl2']) {
                    case "all" :
                        $info = $this->get_data("SELECT * FROM granjero;");
                        break;
                    case "one" :
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM granjero WHERE id = '$id';");
                        break;
                    case "con_finca":
                        $info = $this->get_data("SELECT g.*, MAX(f.cantidad_gallinas) 
                            AS cgallinas, MAX(f.cantidad_vacas) AS cvacas FROM granjero g, 
                            finca f WHERE g.id = f.granjero;");
                        break;
                }
                break;
            case "paciente":
                switch ($option['lvl2']) {
                    case "all" :
                        $info = $this->get_data("SELECT * FROM paciente;");
                        break;
                    case "one" :
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM paciente WHERE id = '$id';");
                        break;
                }
                break;

            case "finca":
                switch ($option['lvl2']) {
                    case "uno" :
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM finca WHERE id = '$id';");
                        break;
                    case "all" :
                        $info = $this->get_data("SELECT * FROM finca;");
                        break;
                    case "por_granjero" :
                        $granjero = mysql_real_escape_string($data['granjero']);
                        $info = $this->get_data("SELECT * FROM finca WHERE granjero = '$granjero';");
                        break;
                    case "con_gnombre":
                        $info = $this->get_data("SELECT c.*, b.nombre AS gnombre FROM finca c, granjero b 
                                                WHERE c.granjero = b.id;");
                        break;
                }
                break;

            case "historia":
                switch ($option['lvl2']) {
                    case "uno" :
                        $id = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM historia WHERE id = '$id';");
                        break;
                    case "all" :
                        $info = $this->get_data("SELECT * FROM historia;");
                        break;
                    case "por_paciente" :
                        $paciente = mysql_real_escape_string($data['id']);
                        $info = $this->get_data("SELECT * FROM historia WHERE paciente = '$paciente';");
                        break;
                }
                break;


            case "parametro_control":
                switch ($option['lvl2']) {

                    case "one" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM parametro_control WHERE codigo = '$id';");
                        break;

                    case "parametro":
                        $id = mysql_real_escape_string($data['codigo1']);
                        $info = $this->get_data("SELECT * FROM parametro_control  WHERE codigo_modelo = '$id';");
                        //echo $id;
                        break;
                    case "nuevo_codigo":
                        $info = $this->get_data("SELECT p.* FROM parametro_control p where  p.codigo = (select max(codigo) from parametro_control);");
                        break;
                }
                break;
            case "modelo":
                switch ($option['lvl2']) {

                    case "one" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM modelo WHERE codigo = '$id';");
                        break;
                    case "all" :
                        $info = $this->get_data("SELECT * FROM modelo;");
                        break;
                }
            case "reporte":
                switch ($option['lvl2']) {

                    case "one" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM reporte WHERE codigo = '$id';");
                        break;
                    case "fase_anterior":
                        $id = mysql_real_escape_string($data['fa']);
                        $info = $this->get_data("select * from reporte where codigo=(select max(codigo) from reporte where codigo_guia='$id');");
                        break;
                    case "historial_reportes":
                        $id = mysql_real_escape_string($data['hr']);
                        $info = $this->get_data("SELECT r.* FROM reporte r where  r.codigo_guia='$id';");
                        break;
                }
                break;
            case "orden_produccion":
                switch ($option['lvl2']) {

                    case "one" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM orden_produccion WHERE codigo = '$id';");
                        break;
                    case "codigo_anterior":
                        $id = mysql_real_escape_string($data['fa']);
                        $info = $this->get_data("select * from orden_produccion where codigo=(select max(codigo) from orden_produccion);");
                        break;
                }
                break;
            case "orden_produccion":
                switch ($option['lvl2']) {

                    case "one" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM orden_produccion WHERE codigo = '$id';");
                        break;
                    case "codigo_anterior":
                        $id = mysql_real_escape_string($data['fa']);
                        $info = $this->get_data("select * from orden_produccion where codigo=(select max(codigo) from orden_produccion);");
                        break;
                }
                break;
            case "guia":
                switch ($option['lvl2']) {
                    case "all" :
                        //$id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM guia;");
                        break;

                    case "codigo_ultimo" :
                        //$id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM guia WHERE codigo = (SELECT MAX(codigo) FROM guia);");
                        break;
              
                }
                break;
            case "moto":
                switch ($option['lvl2']) {


                    case "preparar_guia" :
                        $id = mysql_real_escape_string($data['codigo']);
                        $info = $this->get_data("SELECT * FROM moto where codigo_guia='$id';");
                        break;
                }
                break;
            default: break;
        }
        return $info;
    }

    //close the db connection
    public function close() {
        if ($this->cn) {
            mysql_close($this->cn);
        }
    }

}
?>


